// DAO/Impl/CourseNoticeDaoImpl.java
package com.hp.DAO.Impl;                         // 实现包

import com.hp.DAO.BaseDao;                       // BaseDao 基类
import com.hp.DAO.CourseNoticeDao;               // 接口：CourseNoticeDao
import com.hp.Model.CourseNotice;                // 实体：课程公告
import com.hp.Util.RowMapper;                    // 行映射器
import com.hp.Util.SimpleJdbcTemplate;           // JDBC 模板

import java.sql.Timestamp;                // 时间戳
import java.util.Date;                    // Date
import java.util.List;                    // List

/** CourseNoticeDao 的 JDBC 实现 */
public class CourseNoticeDaoImpl extends BaseDao implements CourseNoticeDao {
    public CourseNoticeDaoImpl(SimpleJdbcTemplate jdbc) { super(jdbc); } // 构造注入

    // RowMapper：ResultSet -> CourseNotice
    private static final RowMapper<CourseNotice> M = rs -> {
        CourseNotice n = new CourseNotice();                          // 创建实体
        n.setId(rs.getLong("id"));                                    // id
        n.setCourseId(rs.getLong("course_id"));                       // 课程ID
        n.setCreatedBy(rs.getLong("created_by"));                     // 创建者
        n.setTitle(rs.getString("title"));                            // 标题
        n.setContent(rs.getString("content"));                        // 内容
        Timestamp c = rs.getTimestamp("created_at");                  // 创建时间
        Timestamp u = rs.getTimestamp("updated_at");                  // 更新时间
        n.setCreatedAt(c == null ? null : new Date(c.getTime()));     // 转 Date
        n.setUpdatedAt(u == null ? null : new Date(u.getTime()));     // 转 Date
        n.setIsActive(rs.getBoolean("is_active"));                    // 是否有效
        return n;                                                     // 返回
    };

    @Override
    public CourseNotice findById(Long id) {                           // 按主键查询
        String sql = "SELECT id,course_id,created_by,title,content,created_at,updated_at,is_active " +
                "FROM course_notice WHERE id=?";                 // SQL
        return queryOne(sql, M, id);                                  // 查询
    }

    @Override
    public List<CourseNotice> listByCourse(Long courseId, int offset, int limit) { // 按课程分页
        String sql = "SELECT id,course_id,created_by,title,content,created_at,updated_at,is_active " +
                "FROM course_notice WHERE course_id=? ORDER BY id DESC LIMIT ? OFFSET ?"; // SQL
        return queryList(sql, M, courseId, limit, offset);            // 查询列表
    }

    @Override
    public Long insert(CourseNotice n) {                               // 新增公告
        String sql = "INSERT INTO course_notice (course_id,created_by,title,content,created_at,updated_at,is_active) " +
                "VALUES (?,?,?,?,?,?,?)";                         // SQL
        Date created = n.getCreatedAt() == null ? new Date() : n.getCreatedAt(); // 默认当前
        Timestamp updated = n.getUpdatedAt() == null ? null : new Timestamp(n.getUpdatedAt().getTime()); // 允许为空
        return execInsertReturnId(sql, n.getCourseId(), n.getCreatedBy(), n.getTitle(), n.getContent(),
                new Timestamp(created.getTime()), updated, n.getIsActive()); // 执行插入
    }

    @Override
    public int updateBasic(CourseNotice n) {                           // 更新基础字段
        String sql = "UPDATE course_notice SET title=?, content=?, is_active=?, updated_at=? WHERE id=?"; // SQL
        Timestamp u = n.getUpdatedAt() == null ? new Timestamp(System.currentTimeMillis())
                : new Timestamp(n.getUpdatedAt().getTime());               // 更新时间
        return execUpdate(sql, n.getTitle(), n.getContent(), n.getIsActive(), u, n.getId());             // 执行更新
    }

    @Override
    public int deleteById(Long id) {                                   // 删除公告
        String sql = "DELETE FROM course_notice WHERE id=?";           // SQL
        return execUpdate(sql, id);                                    // 执行删除
    }
}
